# -*- coding: utf-8 -*-
"""
使用配置好的浏览器的BasePage示例
演示如何结合browser_config和BasePage使用
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from Common.browser_config import EnhancedPlaywright
from Common.basepage import BasePage


def demo_basepage_with_config():
    """演示使用配置浏览器的BasePage功能"""
    
    print("=== 配置浏览器 + BasePage 演示 ===")
    
    with EnhancedPlaywright() as pw:
        # 启动配置好的浏览器
        browser = pw.launch_browser()
        context = pw.create_context(auto_login=False)  # 不自动登录
        page = pw.create_page()
        
        # 创建BasePage实例
        base_page = BasePage(page)
        
        # 1. 页面导航测试
        print("\n--- 页面导航测试 ---")
        base_page.goto("https://www.baidu.com")
        print(f"当前URL: {base_page.get_url()}")
        print(f"页面标题: {base_page.get_title()}")
        
        # 2. 基本操作测试
        print("\n--- 基本操作测试 ---")
        
        # 搜索框操作
        search_input = "#chat-textarea"
        search_button = "#chat-submit-button"
        
        if base_page.fill_text(search_input, "playwright自动化测试", img_desc="输入搜索内容"):
            print("✅ 成功输入搜索内容")
        
        # 等待元素可见并点击
        if base_page.wait_and_click(search_button, img_desc="点击搜索按钮"):
            print("✅ 成功点击搜索按钮")
        
        # 等待页面加载
        if base_page.wait_for_load_state("networkidle"):
            print("✅ 页面加载完成")
        
        # 3. 页面截图
        print("\n--- 截图测试 ---")
        screenshot_path = base_page.save_img("百度搜索结果页面")
        if screenshot_path:
            print(f"✅ 页面截图保存: {screenshot_path}")
        
        # 4. 元素操作测试
        print("\n--- 元素操作测试 ---")
        
        # 获取搜索结果
        results = "#content_left h3"
        count = base_page.get_element_count(results)
        print(f"✅ 找到 {count} 个搜索结果")
        
        if count > 0:
            # 点击第一个搜索结果
            first_result = f"{results}:first-child a"
            if base_page.scroll_and_click(first_result, img_desc="点击第一个搜索结果"):
                print("✅ 成功点击第一个搜索结果")
                
                # 等待新页面加载
                base_page.wait_for_load_state("load")
                print(f"✅ 跳转到新页面: {base_page.get_url()}")
        
        # 5. JavaScript执行测试
        print("\n--- JavaScript执行测试 ---")
        
        # 滚动测试
        if base_page.scroll_to_bottom():
            print("✅ 成功滚动到页面底部")
        
        # 获取页面信息
        page_info = base_page.execute_javascript("""
            return {
                title: document.title,
                url: window.location.href,
                height: document.body.scrollHeight,
                width: document.body.scrollWidth
            }
        """)
        
        if page_info:
            print(f"✅ 页面信息: {page_info}")
        
        # 6. 本地存储测试
        print("\n--- 本地存储测试 ---")
        
        if base_page.set_local_storage("test_key", "配置浏览器测试"):
            print("✅ 成功设置localStorage")
        
        value = base_page.get_local_storage("test_key")
        if value:
            print(f"✅ 获取localStorage值: {value}")
        
        # 7. Cookie测试
        print("\n--- Cookie测试 ---")
        cookies = base_page.get_cookies()
        print(f"✅ 当前页面cookies数量: {len(cookies)}")
        
        # 8. 失败自动截图测试
        print("\n--- 失败自动截图测试 ---")
        if not base_page.click_element("#non-existing-button", img_desc="测试不存在按钮"):
            print("✅ 点击不存在元素失败，已自动截图")
        
        print("\n✅ 配置浏览器 + BasePage 演示完成")


def demo_multiple_pages():
    """演示多页面操作"""
    
    print("\n=== 多页面操作演示 ===")
    
    with EnhancedPlaywright() as pw:
        browser = pw.launch_browser()
        context = pw.create_context(auto_login=False)
        
        # 创建多个页面
        pages = []
        base_pages = []
        
        urls = [
            "https://www.baidu.com",
            "https://www.github.com", 
            "https://httpbin.org/get"
        ]
        
        print(f"--- 创建 {len(urls)} 个页面 ---")
        
        for i, url in enumerate(urls):
            page = pw.browser_manager.create_page_with_logging(context)
            base_page = BasePage(page)
            
            print(f"页面 {i+1}: 导航到 {url}")
            base_page.goto(url)
            print(f"  标题: {base_page.get_title()}")
            
            # 截图
            screenshot_path = base_page.save_img(f"多页面测试_页面{i+1}")
            if screenshot_path:
                print(f"  截图: {screenshot_path}")
            
            pages.append(page)
            base_pages.append(base_page)
        
        print("✅ 多页面操作演示完成")
        
        # 页面会在with语句结束时自动清理


def demo_login_required_site():
    """演示需要登录的网站（模拟）"""
    
    print("\n=== 登录网站模拟演示 ===")
    
    with EnhancedPlaywright() as pw:
        browser = pw.launch_browser()
        
        # 检查是否有登录状态
        if pw.browser_manager.storage_path.exists():
            print("✅ 找到已保存的登录状态，将使用")
            context = pw.create_context(auto_login=True)
        else:
            print("⚠️  未找到登录状态，使用普通模式")
            context = pw.create_context(auto_login=False)
        
        page = pw.create_page()
        base_page = BasePage(page)
        
        # 访问需要登录的网站
        test_url = "https://www.iqiyi.com"
        print(f"--- 访问 {test_url} ---")
        
        base_page.goto(test_url)
        print(f"页面标题: {base_page.get_title()}")
        
        # 截图查看状态
        screenshot_path = base_page.save_img("登录状态测试")
        if screenshot_path:
            print(f"✅ 状态截图: {screenshot_path}")
        
        print("✅ 登录网站演示完成")


def demo_advanced_features():
    """演示高级功能"""
    
    print("\n=== 高级功能演示 ===")
    
    with EnhancedPlaywright() as pw:
        browser = pw.launch_browser()
        context = pw.create_context(auto_login=False)
        page = pw.create_page()
        
        base_page = BasePage(page)
        
        # 1. 访问测试页面
        print("--- 访问测试页面 ---")
        base_page.goto("https://httpbin.org/forms/post")
        
        # 2. 表单操作演示
        print("--- 表单操作演示 ---")
        
        # 填写表单
        form_data = {
            "input[name='custname']": "测试用户",
            "input[name='custtel']": "13800138000",
            "input[name='custemail']": "test@example.com"
        }
        
        for selector, value in form_data.items():
            if base_page.fill_text(selector, value, img_desc=f"填写{selector}"):
                print(f"✅ 成功填写 {selector}: {value}")
        
        # 选择下拉框
        if base_page.select_option("select[name='size']", "large", img_desc="选择尺寸"):
            print("✅ 成功选择下拉选项")
        
        # 选择单选按钮
        if base_page.click_element("input[value='bacon']", img_desc="选择培根"):
            print("✅ 成功选择单选按钮")
        
        # 选择复选框
        if base_page.check_checkbox("input[value='mushrooms']", img_desc="选择蘑菇"):
            print("✅ 成功选择复选框")
        
        # 截图表单状态
        form_screenshot = base_page.save_img("表单填写完成状态")
        if form_screenshot:
            print(f"✅ 表单截图: {form_screenshot}")
        
        # 3. 长按和连续点击演示
        print("--- 特殊操作演示 ---")
        
        # 连续点击
        if base_page.click_element_times("input[type='submit']", 1, img_desc="连续点击提交"):
            print("✅ 成功执行连续点击")
        
        # 等待页面响应
        base_page.wait_for_load_state("networkidle")
        
        # 4. 最终截图
        final_screenshot = base_page.save_img("高级功能演示完成")
        if final_screenshot:
            print(f"✅ 最终截图: {final_screenshot}")
        
        print("✅ 高级功能演示完成")


if __name__ == "__main__":
    print("🚀 配置浏览器 + BasePage 功能演示开始...\n")
    
    # 运行演示
    demo_basepage_with_config()
    # demo_multiple_pages()
    # demo_login_required_site()
    # demo_advanced_features()
    
    print("\n🎉 所有演示完成！")
    
    print("\n💡 主要特性：")
    print("✅ 使用系统Chrome浏览器")
    print("✅ 预配置的用户代理和视口")
    print("✅ 自动注入隐身脚本")
    print("✅ 支持登录状态保存和恢复")
    print("✅ 完整的页面事件日志")
    print("✅ 失败自动截图功能")
    print("✅ 与BasePage完美结合")
